Cross-Site Scripting (XSS) এবং CSRF থেকে নিরাপত্তা

Web Development - অ্যাজাক্স (Ajax) - Security Best Practices (নিরাপত্তার সেরা অনুশীলন) |
13
13

Cross-Site Scripting (XSS) এবং Cross-Site Request Forgery (CSRF) হলো দুটি সাধারণ নিরাপত্তা সমস্যা যা ওয়েব অ্যাপ্লিকেশনগুলিকে ঝুঁকিতে ফেলতে পারে। এই আক্রমণগুলো সাধারণত ব্যবহারকারী বা সার্ভারের অজান্তে ক্ষতিকর কোড অথবা রিকোয়েস্ট তৈরি করে, যার ফলে ব্যবহারকারীর তথ্য চুরি বা অ্যাপ্লিকেশন থেকে অবৈধ অ্যাক্সেস হতে পারে। তবে, কিছু সুরক্ষা পদ্ধতি রয়েছে যা এই আক্রমণগুলো প্রতিরোধ করতে সহায়ক হতে পারে। এই টিউটোরিয়ালে আমরা XSS এবং CSRF আক্রমণ থেকে সুরক্ষা ব্যবস্থা নিয়ে আলোচনা করব।


১. Cross-Site Scripting (XSS) আক্রমণ

XSS হল একটি আক্রমণ যেখানে আক্রমণকারী ক্ষতিকর স্ক্রিপ্ট (যেমন JavaScript) ওয়েব পেজে ইনজেক্ট করে। ব্যবহারকারী যখন সেই ওয়েব পেজটি ভিজিট করেন, তখন আক্রমণকারী স্ক্রিপ্টটি এক্সিকিউট হয় এবং ব্যবহারকারীর সেশনের তথ্য চুরি করতে পারে, যেমন কুকি, পাসওয়ার্ড বা অন্যান্য সংবেদনশীল ডেটা।

XSS আক্রমণের ধরন

  1. Stored XSS: আক্রমণকারী ক্ষতিকর কোড সার্ভারে স্থায়ীভাবে ইনজেক্ট করে এবং এই কোড পরবর্তী সময়ে অন্য ব্যবহারকারীদের দেখানো হয়।
  2. Reflected XSS: আক্রমণকারী কোড ইনপুট ফিল্ডে পাঠায় এবং তা সরাসরি রেসপন্সের মধ্যে চলে আসে, যেমন URL বা ফর্মের মাধ্যমে।
  3. DOM-based XSS: আক্রমণকারী কোড ডকুমেন্ট অবজেক্ট মডেল (DOM) এর মাধ্যমে ইনজেক্ট করে, যেখানে স্ক্রিপ্টটি ক্লায়েন্ট সাইডে এক্সিকিউট হয়।

XSS থেকে সুরক্ষা

  1. Input Validation এবং Output Encoding:

    • সব ইনপুট (যেমন ফর্ম ডেটা) সার্ভারে পাঠানোর আগে ভালভাবে যাচাই (sanitize) করতে হবে এবং যখন এই ডেটা HTML এ প্রদর্শিত হবে তখন সঠিকভাবে output encoding করতে হবে।
    • উদাহরণ: & চিহ্নটি & এ রূপান্তরিত করা।

    উদাহরণ (JavaScript Escape):

    var userInput = "<script>alert('Hacked!');</script>";
    var safeInput = userInput.replace(/</g, "<").replace(/>/g, ">");
    document.getElementById("output").innerHTML = safeInput;
    
  2. HTTPOnly Cookies ব্যবহার করুন:

    • HTTPOnly ফ্ল্যাগ যুক্ত কুকি ব্যবহার করা উচিত যাতে জাভাস্ক্রিপ্ট কোড কুকি অ্যাক্সেস না করতে পারে। এতে XSS আক্রমণের মাধ্যমে কুকি চুরি করা কঠিন হয়ে পড়ে।
    setcookie("session", "value", time() + 3600, "/", "", true, true); // HttpOnly এবং Secure ফ্ল্যাগ
    
  3. Content Security Policy (CSP):

    • CSP একটি নিরাপত্তা বৈশিষ্ট্য যা ব্রাউজারকে নির্দিষ্ট স্ক্রিপ্ট এবং রিসোর্স লোডের অনুমতি দেয়। এটি XSS আক্রমণ থেকে সুরক্ষা দিতে সহায়তা করে।

    উদাহরণ (CSP Header):

    header("Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none';");
    
  4. Sanitize User Inputs:
    • ব্যবহারকারী ইনপুট স্যানিটাইজ করতে হবে, যাতে স্ক্রিপ্ট ইনজেকশন এড়ানো যায়।

২. Cross-Site Request Forgery (CSRF) আক্রমণ

CSRF হল একটি আক্রমণ যেখানে আক্রমণকারী ব্যবহারকারীকে একটি ক্ষতিকর রিকোয়েস্ট পাঠাতে প্ররোচিত করে, যা ঐ ব্যবহারকারীর অ্যাকাউন্টের সাথে সংযুক্ত থাকে। এটি সাধারণত তখন ঘটে যখন ব্যবহারকারী লগইন অবস্থায় থাকেন এবং আক্রমণকারী একটি ফর্ম বা URL ট্রিকের মাধ্যমে তাদের অ্যাকাউন্টে অ্যাক্সেস পায়।

CSRF আক্রমণের উদাহরণ

ধরা যাক, একজন ব্যবহারকারী লগইন হয়ে আছেন এবং আক্রমণকারী তাদের একটি লিঙ্ক পাঠান:

<a href="https://bank.com/transfer?amount=1000&to=attacker_account">Click here to transfer money</a>

এই লিঙ্কে ক্লিক করলে, ব্যবহারকারীর ব্যাংক অ্যাকাউন্ট থেকে টাকা ট্রান্সফার হয়ে যাবে।

CSRF থেকে সুরক্ষা

  1. CSRF Tokens ব্যবহার করা:

    • প্রতিটি ফর্ম সাবমিশনের সাথে একটি CSRF Token পাঠানো উচিত। এই টোকেন সার্ভারে সঠিকভাবে যাচাই করা উচিত। যদি এটি না পাওয়া যায় বা ভুল হয়, তবে রিকোয়েস্টটি বাতিল করা উচিত।

    উদাহরণ (PHP):

    // সেশন শুরু করা
    session_start();
    
    // CSRF Token তৈরি করা
    if (empty($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); // নিরাপদ টোকেন তৈরি
    }
    
    // CSRF Token ইনপুটে যোগ করা
    echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">';
    

    ব্লক রিকোয়েস্ট (PHP):

    // CSRF Token যাচাই
    if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) {
        die("CSRF Token mismatch.");
    }
    
  2. SameSite Cookie Attribute ব্যবহার করা:

    • SameSite কুকি অ্যাট্রিবিউট ব্যবহার করুন, যা নিশ্চিত করে যে কুকি শুধুমাত্র সেম অরিজিন (একই ডোমেইন) রিকোয়েস্টের জন্য পাঠানো হবে। এটি CSRF আক্রমণ থেকে সুরক্ষা দেয়।
    setcookie("session", "value", time() + 3600, "/", "", true, true); 
    header('Set-Cookie: session=abc123; SameSite=Strict');
    
  3. Use Referer Header Validation:

    • Referer হেডার ব্যবহার করে যাচাই করুন যে রিকোয়েস্টটি সঠিক সাইট থেকে এসেছে কিনা।
    if ($_SERVER['HTTP_REFERER'] !== 'https://yourdomain.com') {
        die("Invalid referer");
    }
    

XSS এবং CSRF থেকে সুরক্ষার জন্য একত্রিত পদ্ধতি

  1. Input Validation:
    • ইনপুট ফিল্ডগুলিতে সঠিক ভ্যালিডেশন এবং স্যানিটাইজেশন প্রক্রিয়া প্রয়োগ করুন। বিশেষত, ইউজার ইনপুটে JavaScript কোড নিষিদ্ধ করা উচিত।
  2. Token-Based Authentication (JWT):
    • JSON Web Token (JWT) বা অন্যান্য টোকেন-ভিত্তিক প্রমাণীকরণ ব্যবস্থার মাধ্যমে সুরক্ষা বৃদ্ধি করতে পারেন।
  3. Same-Origin Policy এবং CORS:
    • CORS (Cross-Origin Resource Sharing) সঠিকভাবে কনফিগার করে শুধুমাত্র নির্দিষ্ট ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করুন।

উপসংহার

XSS এবং CSRF হল সাধারণ ওয়েব নিরাপত্তা আক্রমণ, যা ওয়েব অ্যাপ্লিকেশনগুলিকে বিপদে ফেলতে পারে। তবে সঠিক নিরাপত্তা ব্যবস্থা, যেমন input validation, output encoding, CSRF tokens, SameSite cookies, এবং Content Security Policy (CSP) ব্যবহার করে এই আক্রমণগুলো প্রতিরোধ করা সম্ভব। এটি আপনার ওয়েব অ্যাপ্লিকেশনকে নিরাপদ রাখে এবং ব্যবহারকারীর তথ্য সুরক্ষিত রাখে।

Content added By
Promotion